package com.example.customGeneric;

import java.util.ArrayList;

/**
 * 泛型方法的使用
 */
public class CustomMethodGeneric {
    public static void main(String[] args) {
        Car car = new Car();
        car.fly("宝马", 100);//当调用方法时, 传入参数, 编译器就会确定类型
        System.out.println("传入其他类型的值");
        car.fly(300, 100.1);//当调用方法时, 传入参数, 编译器就会确定类型

        System.out.println("===泛型方法===");
        //T->String, R->ArrayList
        Fish<String, ArrayList> fish = new Fish<>();
        fish.hello(new ArrayList(), 11.3);

    }
}

//泛型方法, 可以定义在普通类中, 也可以定义在泛型类中
class Car {//普通类
    public void run(){//普通方法

    }

    //泛型方法
    //修饰符后有<T, R>
    public <T, R> void fly(T t, R r){
        System.out.println(t.getClass());
        System.out.println(r.getClass());
    }
}

class Fish<T, R>{//泛型类
    public void run(){//普通方法

    }

    public <U, M> void eat(U u, M m){//泛型方法

    }

    //这个不是泛型方法, 而是使用了类声明的泛型
    public void hi(T t){

    }
    //泛型方法, 可以使用类声明的泛型, 也可以使用自己声明的泛型
    public<K> void hello(R r, K k){
        System.out.println(r.getClass());
        System.out.println(k.getClass());
    }

}